#include <iostream>
/* 系统抽象类，后期可以扩展很多功能 */
class AbstractSystem
{
public:
    virtual void run() = 0;
};

class MySystem : public AbstractSystem
{
public:
    virtual void run()
    {
        std::cout<<" 普通用户界面启动！\n";
    }
};
class AdminSystem : public AbstractSystem
{
public:
    virtual void run()
    {
        std::cout<<" 管理员用户界面启动！\n";
    }
};

/* 代理：具体类用户看不到，用户只能看到代理类和抽象类 */
class Proxy
{
public:
    void Login(const std::string & name, const std::string & password)
    {
        //根据用户名的不同，启动不同的系统
        if(name == "zhangsan" && password == "123456789")
        {
            s = new MySystem;
            s->run();
        }
        else if(name == "admin" && password == "123456")
        {
            s = new AdminSystem;
            s->run();
        }
    }

private:
    AbstractSystem * s;
};

int main()
{
    Proxy p;
    p.Login("admin", "123456");     // 管理员用户界面启动！
    return 0; 
}